<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组的原生方法</title>
</head>
<body>

</body>
<script>
    // 把数组转换为字符串
    const fruits = ["Banana", "Orange", "Apple", "Mango"];
    console.log(fruits.toString()); // Banana,Orange,Apple,Mango
    // join()
    console.log(fruits.join(" * ")); // Banana * Orange * Apple * Mango
    // pop()
    console.log(fruits.pop());  // Mango
    // push()
    console.log(fruits.push("Kiwi"))  // 4
    // shift()
    console.log(fruits.shift()) // Banana
    // unshift()
    console.log(fruits.unshift('Lemon')); // 4
    // splice()
    fruits.splice(2, 0, "Lemon", "Kiwi");
    // 第一个参数（2）定义了应添加新元素的位置（拼接）。
    // 第二个参数（0）定义应删除多少元素。
    // 其余参数（“Lemon”，“Kiwi”）定义要添加的新元素。
    console.log(fruits)  // ['Lemon', 'Orange', 'Lemon', 'Kiwi', 'Apple', 'Kiwi']
    // 使用 splice() 来删除元素
    fruits.splice(0, 1);        // 删除 fruits 中的第一个元素
    console.log(fruits)  // ['Orange', 'Lemon', 'Kiwi', 'Apple', 'Kiwi']
    // concat()
    const myGirls = ["Cecilie", "Lone"];
    const myBoys = ["Emil", "Tobias", "Linus"];
    console.log(myGirls.concat(myBoys)) ;   // 连接 myGirls 和 myBoys  ['Cecilie', 'Lone', 'Emil', 'Tobias', 'Linus']
    // concat()合并三个数组
    const myBoysTwo = ["LIli", "JieJie"];
    console.log(myGirls.concat(myBoys,myBoysTwo)); // 连接 myGirls 和 myBoys 和 myBoysTwo ['Cecilie', 'Lone', 'Emil', 'Tobias', 'Linus', 'LIli', 'JieJie']
    // concat()可以将值作为参数
    console.log(myBoysTwo.concat(['hahah']))  // ['LIli', 'JieJie', 'hahah']
    // slice()
    console.log(myBoysTwo.slice(1) )  // ['JieJie']
    // slice()可接受两个参数，比如 (1, 3)。该方法会从开始参数选取元素，直到结束参数（不包括）为止。
    console.log(myBoysTwo.slice(0,2) )  // ['LIli', 'JieJie']
    // reduce() 语法：arr.reduce(callback,[initialValue])
    const arr = [1, 2, 3, 4];
    const sum = arr.reduce(function(prev, cur, index, arr) {
        console.log(prev, cur, index);
        return prev + cur;
    },0)
    console.log(arr, sum);
    // 0 1 0
    // 1 2 1
    // 3 3 2
    // 6 4 3
    // [1, 2, 3, 4] 10
    // reduce() 求和求积
    const  arr = [1, 2, 3, 4];
    const sum = arr.reduce((x,y)=>x+y)
    const mul = arr.reduce((x,y)=>x*y)
    console.log( sum ); //求和，10
    console.log( mul ); //求乘积，24
    // reduce() 简单数组去重
    let arr = [1,2,3,4,4,1]
    let newArr = arr.reduce((pre,cur)=>{
        if(!pre.includes(cur)){
            return pre.concat(cur)
        }else{
            return pre
        }
    },[])
    console.log(newArr);// [1, 2, 3, 4]
    // reduce() 数组对象去重
    let arr = [
        {name: 'mom', id:1},
        {name: 'timo', id:2},
        {name: 'mom', id:1},
        {name: 'timo', id:2},
    ]
    let obj = {}
    let newArr = arr.reduce((item, next)=>{
        obj[next.id] ? "" : (obj[next.id] = true && item.push(next));
        return item;
    },[])

    console.log(newArr);// [{name: 'mom', id:1}, {name: 'timo', id:2}]
</script>
</html>
